package com.sandbox;

import com.pinea.*;

import static com.pinea.Pinea.*;

public class PineaTest {
    public static void main(String[] args) {
        // 初始化引擎，创建标题为"PineaTest"、尺寸800x600的窗口
        pineaInit("PineaTest", 800, 600);
        PineaEvent event = new PineaEvent(); // 事件对象
        PineaColor bgColor = new PineaColor(50, 50, 50, 255); // 背景色（深灰色）

        // 测试矩形（位置、大小和颜色）
        PineaRect rect = new PineaRect(100, 150, 60, 60);
        PineaColor rectColor = new PineaColor(30, 30, 30, 255);

        // 加载图像资源
        PineaImage bgImage = pineaLoadImage("Pinea/PineaTest/assets/images/bg.png");           // 背景图
        PineaImage playerImage = pineaLoadImage("Pinea/PineaTest/assets/images/mario.png"); // 玩家图像
        // 玩家图像源区域（从原图裁剪的区域）和目标区域（屏幕上绘制的位置和大小）
        PineaRect playerSrc = new PineaRect(16 * 6, 16 * 2, 16, 16);
        PineaRect playerDst = new PineaRect(100, 200, 16 * 2.68f, 16 * 2.68f);

        // 加载音频资源
        PineaAudio bgm = pineaLoadMusic("Pinea/PineaTest/assets/sounds/bgm.mp3");        // 背景音乐
        pineaPlayMusic(bgm, true);                                                    // 循环播放背景音乐
        PineaAudio jumpSound = pineaLoadSound("Pinea/PineaTest/assets/sounds/jump.wav"); // 跳跃音效

        // 时间控制变量（用于固定帧率更新）
        long lastTime = pineaGetTime();      // 上一帧时间
        long currentTime;                  // 当前时间
        long accTime = 0;                  // 累计时间
        long deltaTime = 1000000000 / 60; // 每帧目标时间（60帧/秒，单位：纳秒）
        float deltaTimeF = 1 / 60.0f;          // 每帧时间（秒）

        pineaShow(); // 显示窗口

        // 主循环标志
        boolean running = true;
        while (running) {
            // 事件处理循环：处理所有待处理事件
            while (pineaPollEvent(event)) {
                if (event.type == PINEA_EVENT_QUIT) {
                    // 窗口关闭事件：退出主循环
                    running = false;
                } else if (event.type == PINEA_EVENT_KEY_DOWN) {
                    // 按键按下事件：更新按键状态为按下
                    Input.update(event.key, true);
                } else if (event.type == PINEA_EVENT_KEY_UP) {
                    // 按键释放事件：更新按键状态为释放
                    Input.update(event.key, false);
                } else {
                    // 输出其他事件信息（调试用）
                    System.out.println(event.type + "," + event.key + "," + event.x + "," + event.y);
                }
            }

            // 时间更新：计算帧间隔并累计时间
            currentTime = pineaGetTime();
            accTime += currentTime - lastTime;
            lastTime = currentTime;

            // 固定帧率更新：当累计时间达到目标帧时间时执行更新
            if (accTime >= deltaTime) {
                while (accTime >= deltaTime) {
                    accTime -= deltaTime;

                    // 游戏逻辑更新
                    // 键盘控制玩家移动（WASD键）
                    if (Input.isKeyPressed(PINEA_KEY_A)) {
                        playerDst.x -= deltaTimeF * 250; // 左移
                    }
                    if (Input.isKeyPressed(PINEA_KEY_D)) {
                        playerDst.x += deltaTimeF * 250; // 右移
                    }
                    if (Input.isKeyPressed(PINEA_KEY_W)) {
                        playerDst.y -= deltaTimeF * 250; // 上移
                    }
                    if (Input.isKeyPressed(PINEA_KEY_S)) {
                        playerDst.y += deltaTimeF * 250; // 下移
                    }
                    // 空格键播放跳跃音效
                    if (Input.isKeyDown(PINEA_KEY_SPACE)) {
                        pineaPlaySound(jumpSound, 0);
                    }
                    // H键播放背景音乐
                    if (Input.isKeyDown(PINEA_KEY_H)) {
                        pineaPlayMusic(bgm, true);
                    }
                    // J键暂停音乐
                    if (Input.isKeyDown(PINEA_KEY_J)) {
                        pineaPauseMusic();
                    }
                    // K键恢复音乐
                    if (Input.isKeyDown(PINEA_KEY_K)) {
                        pineaResumeMusic();
                    }
                    // L键停止音乐
                    if (Input.isKeyDown(PINEA_KEY_L)) {
                        pineaStopMusic();
                    }
                }

                // 渲染部分
                pineaClear(bgColor); // 清空屏幕为背景色

                // 绘制背景图（全屏绘制）
                pineaDrawImage(bgImage, null, null, 0, 0);
                // 绘制测试矩形
                pineaFillRect(rect, rectColor);
                // 绘制玩家图像（带旋转和翻转效果）
                pineaDrawImage(playerImage, playerSrc, playerDst, 30, PINEA_FLIP_HORIZONTAL | PINEA_FLIP_VERTICAL);

                pineaRender(); // 刷新屏幕显示
            }
        }

        // 释放资源
        pineaDropImage(bgImage);
        pineaDropImage(playerImage);
        pineaDropMusic(bgm);
        pineaDropSound(jumpSound);
        pineaQuit(); // 退出引擎并释放所有资源
    }
}
